#include <stdio.h>
#include <stdlib.h>

#define LEARNRATE 0.1
#define ENTRADAS 3
#define BIAS 0.5
#define CORRIDAS 5

double recalcularW(double w,int y, int d, int x ){
	double w1;
	w1=w + LEARNRATE*(d-y)*x;
	return w1;
}


int calcularSalida(int x[],double w[]){
	double res=0;
	int i;

	for(i=0;i<ENTRADAS;i++){
		res+=x[i]*w[i];
	}
	res-=BIAS;
	
	if(res>0) return 1;
	return 0;
}

int pasada(int x[],int esperada,double w[]){
	int i;
	int salida = calcularSalida(x,w);
	for(i=0;i<ENTRADAS;i++){
		w[i]=recalcularW(w[i],salida,esperada,x[i]);
	}	

	return salida;
}


int main(void){

	double w[ENTRADAS];
	int x[ENTRADAS];
	int i,j;
	int salida,esperada;

	for(i=0;i<ENTRADAS;i++){
		w[i]=0;
	}
	
	
	for(j=0;j<CORRIDAS;j++){
		printf("Corrida %d\n",(j+1));
		x[0]=0;	
		x[1]=0;
		x[2]=0;
		esperada=0;
		salida=pasada(x,esperada,w);
		printf("salida:%d\n",salida);
		
		x[0]=0;	
		x[1]=1;
		x[2]=0;
		esperada=1;
		salida=pasada(x,esperada,w);
		printf("salida:%d\n",salida);
	
		x[0]=1;	
		x[1]=0;
		x[2]=0;
		esperada=1;
		salida=pasada(x,esperada,w);
		printf("salida:%d\n",salida);

		x[0]=0;	
		x[1]=1;
		x[2]=1;
		esperada=1;
		salida=pasada(x,esperada,w);
		printf("salida:%d\n",salida);

		x[0]=1;	
		x[1]=1;
		x[2]=1;
		esperada=1;
		salida=pasada(x,esperada,w);
		printf("salida:%d\n",salida);

		x[0]=1;	
		x[1]=0;
		x[2]=1;
		esperada=1;
		salida=pasada(x,esperada,w);
		printf("salida:%d\n",salida);

		x[0]=0;	
		x[1]=0;
		x[2]=1;
		esperada=1;
		salida=pasada(x,esperada,w);
		printf("salida:%d\n",salida);

		x[0]=1;	
		x[1]=1;
		x[2]=0;
		esperada=1;
		salida=pasada(x,esperada,w);
		printf("salida:%d\n\n",salida);
	}
	

	


	return 0;
} 